セルのデータを複写する方法には、一旦、クリップボードに貼り付けてから目的のセルに複写する方法と、貼り付け先を指定してダイレクトに複写する方法があります。また、コピー元のデータとリンクして複写することもできます。
コピーには「Copy」メソッドを使用します。クリップボードを経由して貼り付けるときは、Paste
メソッドを使用します。Paste
メソッドはクリップボードの内容に合うように貼り付け先範囲を調節しますので、貼り付け先範囲は、コピー範囲の大きさにかかわらず、貼り付け先の左上端セルを指定します。
ダイレクトに複写するときは、Copy
メソッドの引数として、Direct:=<貼り付け先>で指定します。
処理内容:セルA1をセルB1に貼り付けます。(先に貼り付け先を選択)
Sub copy_1()
Worksheets("Sheet1").Select
Range("A1").Copy
Range("B1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
処理内容:セルA1をセルB1に貼り付けます。(後で貼り付け先を指定)
Sub copy_2()
Worksheets("Sheet1").Select
Range("A1").Copy
ActiveSheet.Paste Destination:=Range("B1")
Application.CutCopyMode = False
End Sub
処理内容:セルA1:A5をセルB1に貼り付けます。(複数セルを貼り付け)
Sub copy_3()
Worksheets("Sheet1").Select
Range("A1:A5").Copy
Range("B1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
処理内容:セルA1をセルB1に貼り付けます。(1つのセルを複数セルに貼り付け)
Sub copy_4()
Worksheets("Sheet1").Select
Range("A1").Copy
Range("B1:B5").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
処理内容:セルA1をセルB1にリンク貼り付けします。
Sub copy_5()
Worksheets("Sheet1").Select
Range("A1").Copy
Range("B1").Select
ActiveSheet.Paste link:=True
Application.CutCopyMode = False
End Sub
処理内容:セルA1をセルB1に貼り付けます。
Sub copy_6()
Worksheets("Sheet1").Select
Range("A1").Copy Destination:=Range("B1")
Application.CutCopyMode = False
End Sub
処理内容:セルA1をセルB1に貼り付けます。(省略形)
Sub copy_7()
Worksheets("Sheet1").Select
Range("A1").Copy Range("B1")
Application.CutCopyMode = False
End Sub
処理内容:セルA1をセルB1に貼り付けます。(超省略形)
Sub copy_8()
Worksheets("Sheet1").Select
[A1].Copy [B1]
Application.CutCopyMode = False
End Sub


2 選択範囲の一部の内容を複写
セルは、入力された文字列、計算式などのデータのほか、いろいろな書式などが設定されています。これらの「値」「計算式」「書式」などを区別して複写するには、Copy
メソッドによりコピーした後、データの貼り付け時に PasteSpecial
メソッドを使用します。
PasteSpecial メソッドの構文
expression.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)
例1:セルA1の値だけをセルB1に複写します。(Paste
メソッドの定数で指定)
Range("A1").Copy
Range("B1").PasteSpecial Paste:=xlValues
例2:セルA1の入力規則だけをセルB1に複写します。(Paste
メソッドの定数の番号で指定)
Range("A1").Copy
Range("B1").PasteSpecial Paste:=6
PasteSpecial メソッドの引数の内容
引 数 |
内 容 |
Paste |
省略可能です。指定範囲に何を複写するかを指定します。「書式」にはフォント、表示形式のほか、条件付書式、セルの背景色・塗りつぶし、罫線も含まれます。
定数の代わりに番号で指定することもできます。 |
番号 |
定 数 |
複 写 の 内 容 |
1 |
xlAll |
すべて(値、計算式、書式、入力規則、コメント) |
2 |
xlFormulas |
計算式(計算式のほか、文字列・数値も含みます) |
3 |
xlValues |
値(計算式の結果として表示される値も含みます) |
4 |
xlFormats |
書式 |
5 |
xlPasteComments |
コメント |
6 |
xlDataValidation |
入力規則
定数を使用するとエラーになるので、番号で指定 |
7 |
xlAllExceptBorders |
罫線を除くすべて(値、計算式、罫線以外の書式)
定数を使用するとエラーになるので、番号で指定 |
8 |
xlColumnWidths |
列幅
定数を使用するとエラーになるので、番号で指定 |
Operation |
省略可能です。コピーした数値と貼り付け先の数値で行う演算の種類を指定します。(コピー元または複写先に計算式が入力されていると、演算が正しく行われないこともあるので注意を要します。)
定数の代わりに番号で指定することもできます。 |
番号 |
定 数 |
演 算 の 内 容 |
1 |
xlNone |
しない 演算を実行しない |
2 |
xlAdd |
加算 「複写先+コピー元」の演算を実行 |
3 |
xlSubtract |
減算 「複写先−コピー元」の演算を実行 |
4 |
xlMultiply |
乗算 「複写先*コピー元」の演算を実行 |
5 |
xlDivide |
除算 「複写先/コピー元」の演算を実行 |
SkipBlanks |
省略可能です。クリップボードに含まれる空白のセルを貼り付けの対象にしないようにするには、True を指定します。既定値は False です。
SkipBlanks は、コピー範囲の一部に空白があり、貼り付け先の同じ位置にデータがあるときに、空白を複写しないようにする機能であって、コピー範囲の空白部分を詰めて複写するわけではありません。 |
Transpose |
省略可能です。貼り付けのときにデータの行と列を入れ替えるには、True を指定します。既定値は False です。 |


処理内容:計算式のみを複写します。
Sub PasteSpecial_1()
Worksheets("Sheet1").Select
Range("A1:A10").Copy
Range("B1").PasteSpecial Paste:=lFormulas
Application.CutCopyMode = False
End Sub
処理内容:コピー元の値を、複写先の値に加算します。(コピー元の空白を無視)
Sub PasteSpecial_2()
Worksheets("Sheet1").Select
Range("A1:A10").Copy
Range("B1").PasteSpecial Operation:=xlAdd, SkipBlanks:=True
Application.CutCopyMode = False
End Sub
処理内容:罫線を除くすべてを複写します。
Sub PasteSpecial_3()
Worksheets("Sheet1").Select
Range("A1:A10").Copy
Range("B1").PasteSpecial Paste:=7
Application.CutCopyMode = False
End Sub
|
PasteSpecial メソッドを使用しない部分的な複写 |
処理内容:選択範囲の計算式を複写します。
Sub PasteSpecial_4()
Worksheets("Sheet1").Select
Range("B1:B10").Formula = Range("A1:A10").Formula
Application.CutCopyMode = False
End Sub
処理内容:選択範囲の表示形式の書式のみ複写します
Sub PasteSpecial_5()
Worksheets("Sheet1").Select
Range("B1:B10").NumberFormat=Range("A1:A10").NumberFormat
Application.CutCopyMode = False
End Sub
処理内容:計算式を計算結果の値に変換します。
Sub PasteSpecial_6()
Worksheets("Sheet1").Select
Range("A1:A10").Value = Range("A1:A10").Value
Application.CutCopyMode = False
End Sub
処理内容:オートフィルタで抽出された結果(可視セル)だけ複写します。
Sub PasteSpecial_7()
Worksheets("Sheet1").Select
With Range("A1")
.AutoFilter
.AutoFilter Field:=1, Criteria1:="=りんご"
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
Range("B1").PasteSpecial
.AutoFilter
End With
End Sub


3 オートフィル
オートフィルは、データを連続して複写したり、連続データ(一定の間隔で数値を連続的に変化させる)を作成するときなどに用います。
1 AutoFill メソッドによるオートフィル
AutoFill メソッドの構文と意味は下記のとおりです。
expression.AutoFill(Destination, Type)
expression
には、基準となるデータが入っているセルを指定します。
オートフィルの種類は、引数 Type
の定数により指定します。
引 数 |
内 容 |
Destination |
必ず指定します。オートフィルの書き込み先になる
セル範囲を指定します。基準となるデータの入ったセル範囲も含むようにします。
基準セル範囲を 2
つ分指定して、データの数値に間隔がある場合、その差分を加えた連続データを作成することができます。
たとえば、最初のセルの値を 1、次のセルの値を 3
として、2
つのセルを基準セルに指定してオートフィルを行うと、奇数だけの連続データとなります。 |
Type |
省略可能です。リストの種類を表す定数を指定します。 |
定 数 |
内 容 |
書き込み先セル内の数値変化の有無 |
数 値 |
日付・時刻 |
文字列中の数値 |
計算式 |
xlFillDefault |
既定値 |
× |
○ |
○ |
○ |
xlFillCopy |
コピー |
× |
× |
× |
○ |
xlFillSeries |
連続データ |
○ |
○ |
○ |
-- |
xlFillFormats |
書式 |
× |
× |
× |
× |
xlFillValues |
値 |
× |
○ |
○ |
○ |
下記は、年月日のオートフィルです。 |
xlFillDays |
日 |
年月日の「日」の部分が連続データとなります |
xlFillWeekdays |
週日 |
年月日の「日」の部分が土曜・日曜を飛ばした連続データとなります。 |
xlFillMonths |
月 |
年月日の「月」の部分が連続データとなります。
各月の末日を表示するには基準セルの月を末日にしておきます。 |
xlFillYears |
年 |
年月日の「年」の部分が連続データとなります |
処理内容:数値を増分値1で変化させて複写します。
Sub AutoFill_1()
Worksheets("Sheet1").Select
Range("B1").Value = 1
Range("B1").AutoFill Destination:=Range("B1:B7"), Type:=xlFillSeries
End Sub
処理内容:年間の各月最終日を複写します
Sub AutoFill_2()
Dim dateRange As Range
Worksheets("Sheet1").Select
Set dateRange = Range("A1:A12")
Range("A1").Formula = "2002/1/31"
Range("A1").AutoFill Destination:=dateRange, Type:=xlFillMonths
End Sub


2 DataSeries メソッドによるオートフィル
DataSeries メソッドの構文と意味は下記のとおりです。
expression.DataSeries(Rowcol, Type, Date, Step, Stop, Trend)
expression
には、基準となるデータが入っているセルを指定します。
オートフィルの種類は、引数 Type
の定数により指定します。また、数値の増分値( Step )と停止値(
Stop )を指定することができます。
引 数 |
内 容 |
Rowcol |
省略可能です。データを書き込む方向を指定します。この引数を省略すると対象セル範囲のサイズと形状が使われます。 |
定 数 |
内 容 |
xlRows |
行方向(左から右)に書き込みます |
xlColumns |
列方向(上から下)に書き込みます |
Type |
省略可能です。連続データ作成種類を指定します。 |
定 数 |
内 容 |
説 明 |
xlDataSeriesLinear |
加算 |
既定値。前のセルに増分値を加算します |
xlGrowth |
乗算 |
前のセルに増分値を乗算します |
xlChronological |
日付 |
日付の連続データを作成します |
xlAutoFill |
オートフィル |
オートフィルを実行します |
Date |
省略可能です。引数 Type が xlChronological のときに、この引数は日付の増加単位です。 |
定 数 |
内 容 |
説 明 |
xlDay |
日 |
既定値。年月日の「日」の部分が連続データとなります |
xlWeekday |
週日 |
年月日の「日」の部分が土曜・日曜を飛ばした連続データとなります。 |
xlMonth |
月 |
年月日の「月」の部分が連続データとなります。
各月の末日を表示するには基準セルの月を末日にしておきます。 |
xlYear |
年 |
年月日の「年」の部分が連続データとなります |
Step |
省略可能です。連続データの増分値です。既定値は 1 です。 |
Stop |
省略可能です。連続データの停止値です。引数を省略すると、対象セル範囲の終端まで繰り返されます。 |
Trend |
省略可能です。対象セル範囲に入力されている値を直線 (加算) または指数曲線 (乗算) にあてはめて予測した結果で、残りのセル範囲を埋めるには、True を指定します。[増分] ボックスに入力された値で連続データを作成するには、False を指定します。既定値は False です。 |
処理内容:数値を増分値2で変化させて、列方向に10までの連続数値を作成します。
Sub DataSeries_1()
Worksheets("Sheet1").Select
Range("A1").Value = 2
Range("A1").DataSeries Rowcol:=xlColumns, Type:=xlLinear, _
Date:=xlDay,Step:=2, Stop:=10,Trend:=False
End Sub
処理内容:2002年10月の初日から末日までの土・日を除いた日の連続データを作成します。
Sub DataSeries_2()
Worksheets("Sheet1").Select
Range("B1") = "2002 / 10/ 1"
Range("B1").DataSeries Rowcol:=xlColumns, Type:=xlChronological, _
Date:=xlWeekday, Stop:="2002 / 10 / 31", Trend:=False
End Sub


3 Fill( FillDown,FillRight,FillLeft,FillUp)メソッドによるオートフィル
Fill
メソッドは、セルの内容と書式を複写します。縦横計算の計算式の複写などを簡単に行うことができます。フィル範囲には、基準セルを含めて指定します。
処理内容:行の合計計算式を右方向に複写します。
Sub Fill_1()
Worksheets("Sheet1").Select
Range("A6").Formula = "=SUM(A1:A5)"
Range("A6:D6").FillRight
End Sub
処理内容:列の合計計算式を下方向に複写します。
Sub Fill_2()
Worksheets("Sheet1").Select
Range("E1").Formula = "=SUM(A1:D1)"
Range("E1:E6").FillDown
End Sub


データの消去
1 選択範囲の内容をすべて消去
セルのデータをすべて消去するには、Clear
メソッドにより行います。Clear
メソッドで消去される内容は、値、数式、書式、コメントです。
処理内容:シートの内容をすべて消去します。
Sub Clear_1()
Worksheets("Sheet1").Select
Cells.Clear
End Sub
処理内容:A列の内容をすべて消去します。
Sub Clear_2()
Worksheets("Sheet1").Select
Columns(1).Clear
End Sub


2 選択範囲の一部の内容を消去
セルデータの数式と値(ClearContents)、書式(ClearFormats)、コメント(ClearContents)など、セルの内容の一部分のみをクリアする方法です。
処理内容:セルの文字(数式と値)だけをクリアします。
Sub Clear_3()
Worksheets("Sheet1").Select
Range("A1:A5").ClearContents
End Sub
処理内容:セルの書式をクリアします。
Sub Clear_4()
Worksheets("Sheet1").Select
Range("A1:A5").ClearFormats
End Sub
処理内容:セルのコメントをクリアします。
Sub Clear_5()
Worksheets("Sheet1").Select
Range("A1:A5").ClearComments
End Sub
処理内容:セルの値だけをクリアします。
Sub Clear_6()
Worksheets("Sheet1").Select
Range("A1:A5").SpecialCells(xlConstants, 23).ClearContents
End Sub
処理内容:セルの数式だけをクリアします。
Sub Clear_7()
Worksheets("Sheet1").Select
Range("A1:A5").SpecialCells(xlFormulas, 23).ClearContents
End Sub
処理内容:セルの背景色をクリアします。
Sub Clear_8()
Worksheets("Sheet1").Select
Range("A1:A5").Interior.ColorIndex = xlNone
End Sub
処理内容:セルの罫線だけをクリアします。
Sub Clear_9()
Worksheets("Sheet1").Select
Range("A1:A5").Borders.LineStyle = xlNone
End Sub
処理内容:セルのパターン色をクリアします。
Sub Clear_10()
Worksheets("Sheet1").Select
Range("A1:A5").Interior.PatternColorIndex = xlNone
End Sub
処理内容:セルのパターンをクリアします。
Sub Clear_11()
Worksheets("Sheet1").Select
Range("A1:A5").Interior.Pattern = xlSolid
End Sub

